/**
 * @author Marcelo
 * @author Samuel
 * @author Thiago
 */

import java.util.ArrayList;
import java.util.List;

public class Neuronio {
	private Double soma;
	private Axonio axonios;
	private List<Dendrito> dentritos;
	private TPfuncao_Ativacao funcao_Ativacao;

	public enum TPfuncao_Ativacao {
		step, sign, sigmoid
	}

	private void step() {
		axonios.setSaida(1);
		if (this.soma < 0) {
			axonios.setSaida(0);
		}
	}

	private void sign() {
		axonios.setSaida(1);
		if (this.soma < 0) {
			axonios.setSaida(-1);
		}
	}

	private void sigmoid() {
		axonios.setSaida((int) (1.0 / (Math.exp(-this.soma) + 1.0)));
	}

	public Neuronio(int numero_Dendritos, double[] peso_Default,
			TPfuncao_Ativacao funcao_Ativacao) {
		axonios = new Axonio();
		dentritos = new ArrayList<Dendrito>();
		this.funcao_Ativacao = funcao_Ativacao;

	}

	public Double somar_Dendritos() {
		soma = 0.0;
		for (Dendrito d : this.dentritos) {
			soma += d.getPeso() * d.getEntrada();
		}
		return soma;
	}

	public void ativar(double[] listaAtivar) {
		for (int i = 0; i < listaAtivar.length; i++) {
			this.dentritos.get(i).setEntrada(listaAtivar[i]);
		}

		switch (funcao_Ativacao) {
		case step:
			step();
			break;

		case sign:
			sign();
			break;

		case sigmoid:
			sigmoid();
			break;
		}
	}

	public int[] treinar(int numero_Epocas, int percentual_Corretos,
			int[][] matriz_Exemplos) {

		int[] list = new int[2];

		return list;

	}

}
